/* eslint-disable */
import axios from 'axios'
import qs from 'qs'
import Nprogress from 'nprogress'

// 参数序列化，把数据格式转为 x-www-form-urlencoded
// 需要第三方插件 nprogress / loading / qs /
// 三个步骤 1. 创建实例 2. 拦截请求 3. 拦截响应
// 三个处理 1. 处理loading 2. 处理token 3. 处理错误

// 请求路径
let BASE_URL = ''
let loadingInstance
let env = process.env.NODE_ENV

// 环境判断
switch (env) {
  case 'development':
    BASE_URL = 'http://localhost:888'
    break
  case 'test':
    BASE_URL = 'http://192.168.101.21/foxcubeCrm/'
    break
  case 'production':
    BASE_URL = 'http://192.168.101.21/foxcubeCrm/'
    break
}
// responseType:"arraybuffer"  返回的数据格式
axios.create({
  //crossDomain: true,//设置cross跨域
  withCredentials: false, //跨域请求是否允许携带cookie资源凭证
  baseURL: BASE_URL,
  timeout: 5000, //请求超时时间
  headers: {
    'Content-Type': 'application/json'
    // 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
  },
  transformRequest: [
    function (data) {
      console.log('datA:我是参数', data)
      data = qs.stringify(data)
      return data
    }
  ]
  // 传递数组时候，如何更改参数格式
})
// axios.defaults.headers.post['Content-Type'] =
//   'application/x-www-form-urlencoded'
//  request请求拦截器
axios.interceptors.request.use(
  (config: any) => {
    console.log('config:', config)
    Nprogress.start()
    // let token=localstorage.getItem('token');
    // token && (config.headers.Authorization=token);//请求携带token
    // config.headers = {
    //     'Content-Type': 'application/x-www-form-urlencoded'  //转换数据格式
    // }
    // loadingInstance = Loading.service({
    //     lock: true,
    //     text: '飞速加载中……',
    // });
    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)

// response响应拦截器
axios.interceptors.response.use(
  (response) => {
    setTimeout(() => {
      Nprogress.done()
    }, 300)
    return response
  },
  (error) => {
    setTimeout(() => {
      // loadingInstance.close();
      Nprogress.done()
    }, 300)
    let { response } = error
    if (response) {
      //服务器有返回内容
      var errormsg = ''
      switch (response.status) {
        case 400:
          errormsg = '错误请求'
          break
        case 401:
          errormsg = '未登录,请重新登录'
          break
        case 403:
          errormsg = '决绝访问'
          break
        case 404:
          errormsg = '请求错误，未找到该资源'
          break
        case 405:
          errormsg = '请求方法未允许'
          break
        case 408:
          errormsg = '请求超时'
          break
        case 500:
          errormsg = '服务器出错'
          break
        case 501:
          errormsg = '网络未实现'
          break
        case 502:
          errormsg = '网络错误'
          break
        case 503:
          errormsg = '服务不可用'
          break
        case 504:
          errormsg = '网络超时'
          break
        case 505:
          errormsg = 'http版本不支持该请求'
          break
        default:
          errormsg = '连接错误'
      }
      // Message({ type: 'warning', message: errormsg });
      return false
    } else {
      //服务器连结果都没有返回  有可能是断网或者服务器奔溃
      if (!window.navigator.onLine) {
        //断网处理
        // Message('网络中断');
        return
      } else {
        //服务器奔了
        // Message('服务器奔了');
        return Promise.reject(error)
      }
    }
  }
)

export { axios }

export function get({ url, params }: any) {
  return new Promise((resolve, reject) => {
    axios
      .get(url, {
        params: params
      })
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err.data)
      })
  })
}
export function post({ url, params }: any) {
  return new Promise((resolve, reject) => {
    axios
      .post(url, params)
      .then((res) => {
        resolve(res.data)
      })
      .catch((err) => {
        reject(err.data)
      })
  })
}

export function patch({ url, params }: any) {
  return new Promise((resolve, reject) => {
    axios.patch(url, params).then(
      (res) => {
        resolve(res.data)
      },
      (err) => {
        reject(err)
      }
    )
  })
}

export function put({ url, params }: any) {
  return new Promise((resolve, reject) => {
    axios.put(url, params).then(
      (res) => {
        resolve(res.data)
      },
      (err) => {
        reject(err)
      }
    )
  })
}
/* eslint-disable */
